Package gwtappcontainer.server.apis.admin

Source Code of gwtappcontainer.server.apis.admin.UserRepository

package gwtappcontainer.server.apis.admin;

import static com.googlecode.objectify.ObjectifyService.ofy;
import gwtappcontainer.server.DatastoreNamespaces;
import gwtappcontainer.server.apps.APIException;
import gwtappcontainer.shared.apis.APIResponse.Status;
import gwtappcontainer.shared.apis.admin.UserProp;

import java.util.ArrayList;
import java.util.List;

import com.google.appengine.api.NamespaceManager;
import com.google.appengine.api.datastore.ReadPolicy.Consistency;
import com.googlecode.objectify.ObjectifyService;
import com.googlecode.objectify.Ref;

class UserRepository {
  static {
    ObjectifyService.factory().register(UserEntity.class);
    ObjectifyService.factory().register(RoleEntity.class)
  }
 
  private static final String NAMESPACE = DatastoreNamespaces.ADMIN;
 
  UserProp addUser(String email) {
             
    //email should not be already present
    UserProp prop = getUserByEmail(email);
    if (null != prop) {
      throw new APIException(Status.ERROR_RESOURCE_ALREADY_EXISTS,
          "User [" + email + "] is already present with id [" + prop.id + "]");           
    }
   
    UserEntity entity = new UserEntity();
    entity.email = email.toLowerCase();
   
    NamespaceManager.set(NAMESPACE);
    ofy().save().entity(entity).now();
   
    return entity.toProp();       
  }
 
  UserProp getUserByEmail(String email) {
    NamespaceManager.set(NAMESPACE);
   
    UserEntity entity = ofy().consistency(Consistency.STRONG).load().type(UserEntity.class).
        filter("email", email.toLowerCase()).first().get();
       
    UserProp prop = null;
    if (null != entity)
      prop = entity.toProp();
   
    return prop;
  }
 
  List<UserProp> getAllUsers() {
 
    NamespaceManager.set(NAMESPACE);
   
    List<UserEntity> entities = ofy().consistency(Consistency.STRONG).load().type(UserEntity.class).list();   
    List<UserProp> props = new ArrayList<UserProp>();
   
    for (UserEntity e : entities) {
      props.add(e.toProp());
    }
   
    return props;       
  }
 
 
  UserProp changeUserPermission(String email, String role,  boolean assign) {
   
    NamespaceManager.set(NAMESPACE);
   
    email = email.toLowerCase();
    role = role.toUpperCase();
   
    UserEntity userEntity = getUserEntity(email);
   
    if (null == userEntity) {
      throw new APIException(Status.ERROR_RESOURCE_DOES_NOT_EXIST,
          "Could not find user with email [" + email + "]");     
    }
   
    RoleEntity roleEntity = new RoleRepository().getRoleEntity(role);
   
    if (null == roleEntity) {
      throw new APIException(Status.ERROR_RESOURCE_DOES_NOT_EXIST,
          "Could not find role [" + role + "]");     
    }
     
    if (null == userEntity.roles)
      userEntity.roles = new ArrayList<Ref<RoleEntity>>();
     
    int matchingIndex = -1;
    boolean alreadyAssigned = false;
    for (int i = 0; i < userEntity.roles.size(); i++) {
      if (role.endsWith(userEntity.roles.get(i).get().name)) {
        alreadyAssigned = true;
        matchingIndex = i;
      }
    }
       
    if (assign && alreadyAssigned) { 
      throw new APIException(Status.ERROR_RESOURCE_ALREADY_EXISTS,
          "role [" + role + "] is already assigned to user [" + email + "]");     
    }
   
    if (!assign && !alreadyAssigned) {
      throw new APIException(Status.ERROR_RESOURCE_DOES_NOT_EXIST,
          "role [" + role + "] is not assigned to user [" + email + "]");     
    }
   
    if (assign) {           
      userEntity.roles.add(Ref.create(roleEntity));     
    } else {           
      userEntity.roles.remove(matchingIndex);                 
   
   
    ofy().save().entity(userEntity).now();
           
    return userEntity.toProp()
  }

 
  private UserEntity getUserEntity(String email) {
    email = email.toLowerCase();
    NamespaceManager.set(NAMESPACE);
   
    List<UserEntity> all = ofy().load().type(UserEntity.class).list();
       
    for (UserEntity entity : all) {
      if (entity.email.equals(email)) {
        return entity;
      }
    }
   
    return null
  }
}
TOP

Related Classes of gwtappcontainer.server.apis.admin.UserRepository

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.